package com.takefive.plugins.jira.wechat.rest; import com.atlassian.plugins.rest.common.security.AnonymousAllowed; import com.atlassian.sal.api.pluginsettings.PluginSettings; import com.atlassian.sal.api.pluginsettings.PluginSettingsFactory; import com.atlassian.sal.api.user.UserManager; import com.takefive.plugins.jira.wechat.api.ConnectionException; import com.takefive.plugins.jira.wechat.api.WeChatActiveConnection; import com.takefive.plugins.jira.wechat.api.template.Member; import com.takefive.plugins.jira.wechat.configuration.UserInfoAccess; import com.takefive.plugins.jira.wechat.configuration.template.UserInfo; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @Path("/roster") @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public class WeChatAccountInfo { private final PluginSettings pluginSettings; private final WeChatActiveConnection connection; private final UserInfoAccess userInfoAccess; public WeChatAccountInfo(PluginSettingsFactory pluginSettingsFactory, UserManager userManager) { this.pluginSettings = pluginSettingsFactory.createGlobalSettings(); this.connection = new WeChatActiveConnection(pluginSettingsFactory); this.userInfoAccess = new UserInfoAccess(pluginSettingsFactory); } @Path("/{username}") @GET @AnonymousAllowed @Produces(MediaType.APPLICATION_JSON) public Response searchInfo(@PathParam("username") String username) { if (userInfoAccess.hasUserInfo(username)) { UserInfo userInfo = userInfoAccess.getUserInfo(username); return Response.ok(new WeChatAccountInfoModel(username, userInfo.getWeChatId(), userInfo.getUserId()), MediaType.APPLICATION_JSON).build(); } else { return Response.ok(new NotFoundError()).build(); } } @Path("/{username}") @POST @AnonymousAllowed public Response updateInfo(@PathParam("username") String username, WeChatAccountInfoModel model) { // Connect to WeChat server Member member = new Member(); String userId = userInfoAccess.getUserInfo(username).getUserId(); member.setUserId(userId); member.setWeChatId(model.getWeChatId()); try { connection.updateMember(member); } catch (ConnectionException e) { e.printStackTrace(); return Response.serverError().build(); } // Store info UserInfo userInfo = userInfoAccess.getOrCreateUserInfo(username); userInfo.setUserId(model.getWeChatId()); userInfo.setWeChatId(model.getWeChatId()); userInfoAccess.setUserInfo(username, userInfo); return Response.ok(new GeneralContent()).build(); } @Path("/{username}") @DELETE @AnonymousAllowed public Response deleteInfo(@PathParam("username") String username) { if (!userInfoAccess.hasUserInfo(username)) { return Response.ok(new GeneralContent()).build(); } UserInfo userInfo = userInfoAccess.getUserInfo(username); // Connect to WeChat server try { connection.deleteMember(userInfo.getUserId()); } catch (ConnectionException e) { e.printStackTrace(); return Response.serverError().build(); } // Remove info userInfoAccess.setUserInfo(username, null); return Response.ok(new GeneralContent()).build(); } }